Системное программирование

Событийное  управление  приложениями

Системное программирование

1. Событийное управление приложениями

Событийное управление (Event-Driven Programming) — это парадигма, при которой выполнение программы определяется событиями (например, клик мыши, нажатие клавиши, закрытие окна).

Событийное  управление  приложениями
Системное программирование

Основные понятия:

  • Событие (Event):
    • Это действие или изменение состояния, которое обрабатывается программой (например, нажатие кнопки).
  • Обработчик событий (Event Handler):
    • Это функция, которая вызывается при возникновении определенного события.
Событийное  управление  приложениями
Системное программирование

Цикл обработки событий:

  1. Программа ожидает события (например, ввод пользователя).
  2. Когда событие происходит, система отправляет его в очередь событий.
  3. Программа извлекает событие из очереди и вызывает соответствующий обработчик.
  4. Обработчик выполняет необходимые действия.
Событийное  управление  приложениями
Системное программирование

Примеры событий в графическом интерфейсе:

  • Click — клик мыши.
  • KeyPress — нажатие клавиши.
  • Resize — изменение размера окна.
  • Close — закрытие окна.
Событийное  управление  приложениями
Системное программирование

Преимущества событийного управления:

  • Удобство для создания интерактивных приложений.
  • Эффективное использование ресурсов (программа не занимает процессорное время в ожидании).
  • Поддержка многозадачности.
Событийное  управление  приложениями
Системное программирование

2. Пример работы с окнами и событиями (на примере Windows API)

#include <windows.h>

// Обработчик событий (Window Procedure)
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_DESTROY:
            PostQuitMessage(0); // Завершение программы при закрытии окна
            return 0;
        case WM_PAINT:
            // Отрисовка содержимого окна
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            TextOut(hdc, 50, 50, L"Hello, World!", 13);
            EndPaint(hwnd, &ps);
            return 0;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

Событийное  управление  приложениями
Системное программирование

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // Регистрация класса окна
    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = L"MainWindowClass";
    RegisterClass(&wc);

    // Создание окна
    HWND hwnd = CreateWindowEx(0, L"MainWindowClass", L"Hello, World!", WS_OVERLAPPEDWINDOW,
                               CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, nCmdShow);

    // Цикл обработки событий
    MSG msg = {};
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}
Событийное  управление  приложениями
Системное программирование

3. Заключение

  • Консольный и графический интерфейсы имеют свои преимущества и недостатки, и выбор между ними зависит от задач и аудитории.
  • Класс окна — это основа для создания и управления окнами в операционных системах.
  • Событийное управление позволяет создавать интерактивные и отзывчивые приложения.
Событийное  управление  приложениями